package cn.tedu.dao;

import cn.tedu.entity.Address;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface AddressMapper {

    /**
     * 新增地址信息
     * @param address 地址信息
     * @return  成功返回插入地址的id
     */
    Integer insert(Address address);

    /**
     * 根据uid查询地址信息
     * @param uid   uid信息
     * @return  成功返回Address对象集合
     */
    List<Address> select(Integer uid);

    /**
     * 根据id删除已添加地址信息
     * @param id    地址id
     * @param uid   用户id
     */
    void delete(
            @Param("id") Integer id,
            @Param("uid") Integer uid);

    /**
     * 根据id修改已添加地址信息
     * @param address   用户地址信息
     * @return  返回受影响行数
     */
    Integer update(Address address);

    /**
     * 根据id查询address地址对象
     * @param id    用户地址id
     * @param uid   用户id
     * @return  返回address地址对象
     */
    Address selectAddressByIdAndUid(
            @Param("id") Integer id,
            @Param("uid") Integer uid);

    /**
     * 根据provinceCode查询Province对象
     * @param provinceCode  Province对象Code值
     * @return  返回Province对象name属性
     */
    String selectProvinceByCode(String provinceCode);

    /**
     * 根据CityCode查询City对象
     * @param cityCode  City对象Code值
     * @return  返回City对象name属性
     */
    String selectCityByCode(String cityCode);

    /**
     * 根据AreaCode查询Area对象
     * @param areaCode  Area对象Code值
     * @return  返回Area对象name属性
     */
    String selectAreaByCode(String areaCode);

    /**
     * 根据uid取消用户所有地址的默认勾选状态
     * @param uid   用户id
     * @return  返回受影响行数
     */
    Integer cancelAllDefault(Integer uid);

    /**
     * 根据用户uid和该地址id将选中地址状态设置为默认
     * @param uid   用户id
     * @param id    选中地址id
     * @return  返回受影响行数
     */
    Integer setDefaultByIdAndUid(
            @Param("uid") Integer uid,
            @Param("id") Integer id);
}